package com.mmall.example.singleton;


import com.mmall.annoations.ThreadSafe;

/**
 *《双重同步锁单例模式》
 * 懒汉模式下实现线程安全 -> synchronized 双重检测机制
 * 单例实例在第一次使用的时候创建
 * Created by megan on 2018/3/22.
 */
@ThreadSafe
public class SingletonExample5 {

    /** 私有的构造函数 **/
    private SingletonExample5(){
    }

    /** 私有的构造函数 **/
    private static volatile SingletonExample5 instance = null;

    /** 通过静态的工厂方法来获取一个单例对象 **/
    public static synchronized SingletonExample5 getInstance(){
        if(instance == null){
            /** 双重检测机制 **/
            synchronized (SingletonExample5.class) {
                instance = new SingletonExample5();
            }
        }
        return instance;
    }

}
